package com.example.a14874.listviewsqlite;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;

import java.io.File;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity
implements IoOnDataChangeListener{
    private EditText edtKey;
    private ImageView ivSearch;
    private SQLiteDatabase db;
    private Button btnAdd;
    private ListView lvstu;
    private ArrayList<Student> studentArrayList=new ArrayList<>(  );
    private StuAdapter adapter;
    private StudbOpenHelper studbOpenHelper;

    @Override
    protected void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_main );
        studbOpenHelper=new StudbOpenHelper( MainActivity.this,"stu.db",null,1 );

        findViews();

        adapter =new StuAdapter( MainActivity.this,studentArrayList ,MainActivity.this);
        readDataFromDB();
        lvstu.setAdapter( adapter );
        lvstu.setOnItemClickListener( new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick( AdapterView<?> parent, View view, int position, long id ) {
                Student student=studentArrayList.get( position );
                Intent intent=new Intent(  );
                intent.setClass( MainActivity.this,EditActivity.class );
                intent.putExtra( "STUNO",student.getStuno() );
                intent.putExtra( "NAME",student.getName() );
                intent.putExtra( "AGE",student.getAge() );
                startActivityForResult( intent, 1002);
            }
        } );
    }
//从数据库读取数据
    private void readDataFromDB() {
        String path=getFilesDir().getAbsolutePath()+ File.separator+"stu.db";
        SQLiteDatabase db=SQLiteDatabase.openOrCreateDatabase( path,null );
        String sql="create table if not exists student (stuno varchar(20),name varchar(20),age int)";
        db.execSQL( sql );

        Cursor cursor=db.query( "student",null,null,
                null,null,null,null,null);
        if (cursor==null || cursor.getCount()==0){
            return;
        }
        studentArrayList.clear();
        for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
            String stuno=cursor.getString( 0 );
            String name=cursor.getString( 1 );
            int age=cursor.getInt( 2 );

            Student student=new Student( stuno,name,age );
            studentArrayList.add( student );

        }
        adapter.notifyDataSetChanged();
        cursor.close();
        db.close();
    }

    private void findViews() {
        lvstu=findViewById( R.id.lv_stu );
        btnAdd=findViewById( R.id.btn_add );
        btnAdd.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick( View v ) {
                Intent intent =new Intent(  );
                intent.setClass( MainActivity.this,AddActivity.class );
                startActivityForResult( intent,1001 );

            }
        } );
        edtKey=findViewById( R.id.edt_key );
        ivSearch=findViewById( R.id.iv_search );
        ivSearch.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick( View v ) {
                String key=edtKey.getText().toString();
                searchFromDB(key);
            }
        } );

        edtKey.addTextChangedListener( new TextWatcher() {
            @Override
            public void beforeTextChanged( CharSequence s, int start, int count, int after ) {

            }

            @Override
            public void onTextChanged( CharSequence s, int start, int before, int count ) {

            }

            @Override
            public void afterTextChanged( Editable s ) {
                String key=edtKey.getText().toString();
                searchFromDB(key);
            }
        } );

    }

    private void searchFromDB(String key) {
        db=studbOpenHelper.getReadableDatabase();
        String where="name like '%"+ key+"%' or stuno like '%"+key+"%'"+
                "or age ='"+key+"'";

        studentArrayList.clear();
        Cursor cursor=db.query( "student",null,
                where,null,null,null,null,null );
        if (cursor!=null&&cursor.getCount()>0){
            for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()){
                String stuno=cursor.getString(  0);
                String name=cursor.getString( 1 );
                int age=cursor.getInt( 2 );

                Student student=new Student( stuno,name,age );
                studentArrayList.add( student );
            }
        }
        adapter.notifyDataSetChanged();;
        cursor.close();
        db.close();
    }

    @Override
    protected void onActivityResult( int requestCode, int resultCode, @Nullable Intent data ) {
        if (resultCode == 2001){
            String stuno=data.getStringExtra( "STUNO" );
            String name=data.getStringExtra( "NAME" );
            int age=data.getIntExtra( "AGE",0 );

            Student student=new Student( stuno,name,age );
            addStudentToDB(student);
        }else if (requestCode==3001){
            String stuno=data.getStringExtra( "STUNO" );
            String name=data.getStringExtra( "NAME" );
            int age=data.getIntExtra( "AGE",0 );

            Student student=new Student( stuno,name,age );
            updateStudentToDB(student);
        }

    }

    private void updateStudentToDB(Student student) {
        db=studbOpenHelper.getWritableDatabase();
        //update方式
        ContentValues values=new ContentValues(  );
        values.put( "name",student.getName() );
        values.put( "age",student.getAge() );
        String where="stuno='"+student.getStuno()+"'";

        db.update( "student",values,where,null );
        db.close();
        readDataFromDB();

    }

    private void addStudentToDB(Student student) {
        db=studbOpenHelper.getWritableDatabase();

        ContentValues values=new ContentValues(  );
        values.put( "stuno",student.getStuno() );
        values.put( "name",student.getName() );
        values.put( "age",student.getAge() );

        db.insert( "student",null,values);
        db.close();
        readDataFromDB();
    }

    @Override
    public void del( Student student ) {
//delete接口
        db=studbOpenHelper.getWritableDatabase();
        String where="stuno = ?";
        String[] argArray={student.getStuno()};
        db.delete( "student",where,argArray );
        db.close();
        readDataFromDB();
    }
}
